package com.candy.dao;

import java.sql.*;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Set;

public class DBHepler4PS {

    public static void main(String[] args) {
        test02();
    }

    /**
     * 测试新增操作
     */
    public static void test02() {
        try {
//        注册或实例化驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
//            获取数据库的链接对象
            String url="jdbc:mysql://localhost:3306/ld_mysql0317? characterEncoding=utf8 & useSSL=false & serverTimezone=UTC & rewriteBatchedStatements=true";
            String username="root";
            String password="123456";
            Connection conn= DriverManager.getConnection(url,username,password);
//            获取PreparedStatement对象
            String sql="INSERT INTO userinfo(username,userpwd,useraddress,usertel) VALUES(?,?,?,?);";
            PreparedStatement ment= conn.prepareStatement(sql);
            ment.setString(1,"太乙真人");
            ment.setString(2,"123456");
            ment.setString(3,"玉虚宫");
            ment.setString(4,"14598759685");
            int num=ment.executeUpdate();
            System.out.println(num);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }


    }

    /**
     * 测试查询操作
     */
    public static void test01() {
        try {
//        注册或实例化驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
//            获取数据库的链接对象
            String url="jdbc:mysql://localhost:3306/ld_mysql0317? characterEncoding=utf8 & useSSL=false & serverTimezone=UTC & rewriteBatchedStatements=true";
            String username="root";
            String password="123456";
            Connection conn= DriverManager.getConnection(url,username,password);
//            获取PreparedStatement对象
            String sql="select * from userinfo where username like ?";
            PreparedStatement ment= conn.prepareStatement(sql);
//            对SQL中占位的部分进行赋值
            ment.setString(1,"%张%");
            ResultSet re=ment.executeQuery();
//            进行数据转储
            LinkedList<LinkedHashMap<String,Object>> lp=new LinkedList();
//            准备好一个map，存储每一行的数据
            LinkedHashMap eachRow=null;
//            这里需要知道表中一个有多少个列，每个列的列名是什么，方便后续进行存放在map中
//            获取元数据（能够知道数据的结构组成）
            ResultSetMetaData rm=re.getMetaData();
//            获取数据表中一共有多少个列
            int count=rm.getColumnCount();
            while (re.next()){
                eachRow=new LinkedHashMap();
//               循环取出数据，并将数据存储在map中
                for (int i = 1; i <=count ; i++) {
//                    rm.getColumnName(i)取出该列对应的列名
//                    re.getObject(i)：通过该列的索引取出该列对应值
                    eachRow.put(rm.getColumnName(i),re.getObject(i));
                }
//               将每一行数据存放在list集合中
                lp.add(eachRow);
            }
            //     (6)关闭资源；资源关闭要有顺序，先关闭ResultSet,再关闭Statement，最后关闭Connection
            re.close();
            ment.close();
            conn.close();
            System.out.println("资源关闭之后...");
//            可以直接从容器（lp)里面取出数据
//            foreach循环：语法for(要遍历的集合中的每一个数据 的 数据类型 要遍历的单元的 假名：要遍历的集合的名字）{}
            for (LinkedHashMap<String,Object> map : lp){
//                取出该map中所有key放在set集合中
                Set se=map.keySet();
//                对set集合进行遍历，循环取出每个key对应的value
                for (Object key:se){
//              map.get(key)取出指定key所包含的value
                    System.out.print(key+"："+map.get(key)+"\t");
                }
                System.out.println();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

